package cn.wizzer.app.crown.modules.services.order;

import cn.wizzer.app.crown.modules.models.CrownLeague;
import cn.wizzer.app.crown.modules.models.CrownMatch;
import cn.wizzer.app.crown.modules.models.CrownOrder;
import cn.wizzer.app.crown.modules.models.caches.CrownMatchChampion;
import cn.wizzer.app.crown.modules.models.caches.CrownMatchSimplex;
import cn.wizzer.app.crown.modules.models.enums.PlayWayEnum;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.math.BigDecimal;
import java.util.List;

public interface CrownOrderService extends BaseService<CrownOrder> {


    /**
     * 后台注单记录
     *
     * @param orderType     R P3 FS
     * @param orderStatus   订单的状态 待结算、待确认、已结算、已取消等等
     * @param dateType      future browse running
     * @param searchKeyword 搜索关键字 昵称或手机号码
     * @param searchDate    搜索日期
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination listPage(String orderType, String orderStatus, String dateType,
                        String searchKeyword, String[] searchDate, int pageNumber, int pageSize);

//    /**
//     * 人工结算
//     *
//     * @param orderId
//     * @param amount
//     * @param remark
//     * @param platformUid
//     */
//    void artificial(String orderId, BigDecimal amount, String remark, String platformUid);

    /**
     * 撤销注单
     *
     * @param order
     * @param platformUid
     */
    void revert(CrownOrder order, String platformUid);


    /**
     * 单式注单
     *
     * @param appid
     * @param amount
     * @param simplex
     */
    void createSimplex(String appid, BigDecimal amount, CrownMatchSimplex simplex);

    /**
     * 综合注单
     *
     * @param appid
     * @param amount
     * @param simplexs 数组
     */
    void createComplex(String appid, BigDecimal amount, List<CrownMatchSimplex> simplexs);

    /**
     * 冠军注单
     *
     * @param appid
     * @param amount
     * @param champion
     */
    void createChampion(String appid, BigDecimal amount, CrownMatchChampion champion);

    /**
     * 投注记录
     *
     * @param appid
     * @param orderType 订单类型(待确认、待结算、已结算、已取消)
     * @param matchType 赛事(FOOTBALL BASKETBALL)
     * @param startTime 查询指定日期的开始时间
     * @param endTime   查询指定日期的结束时间
     * @param pageNo
     * @param pageSize
     * @return
     */
    Pagination list(String appid, String orderType, String matchType, String playWay, Long startTime, Long endTime, int pageNo, int pageSize);

    /**
     * 投注记录详情
     *
     * @param appid   用户ID
     * @param orderId 订单ID
     * @return Result
     */
    CrownOrder detail(String appid, String orderId);

    /**
     * 自动结算
     */
    void settleAuto();

    /**
     * 手动结算
     *
     * @param orderId     订单ID
     * @param platformUid 操作人ID
     */
    void settleManual(String orderId, String platformUid);

    /**
     * 定时确认‘待确认’状态的订单
     */
    void orderConfirm();

    /**
     * 赛事订单重新结算
     *
     * @param match
     */
    void reSettle(CrownMatch match);


    /**
     * 联赛订单重新结算
     *
     * @param league
     */
    void reSettle(CrownLeague league);
}
